import fs from 'node:fs';
import path from 'node:path';

/**
 * @param filePath 文件路径
 * @param data 文件数据
 * @description: 保存文件
 */
export function saveFile(filePath: string, data: string | Buffer) {
  return new Promise((resolve, reject) => {
    fs.writeFile(filePath, data, { encoding: 'utf8' }, err => {
      if (err) reject(err);
      resolve(true);
    });
  });
}

/**
 * @param filePath 文件路径
 * @returns 文件数据
 * @description: 读取文件,读取文件前先修改文件为可写文件
 */
export function readFile(filePath: string) {
  return new Promise((resolve, reject) => {
    fs.chmod(filePath, 0o777, error => {
      if (error) {
        reject('修改文件读写权限发生错误。');
      } else {
        fs.readFile(filePath, { encoding: 'utf8' }, function (err, data) {
          if (err) reject(err);
          resolve(data);
        });
      }
    });
  });
}

/**
 * @param filePath 文件路径
 * @returns 文件数据
 * @description: 判断文件是否存在
 */
export function hasExistsFile(filePath: string) {
  return new Promise(resolve => {
    fs.exists(filePath, exists => {
      resolve(exists);
    });
  });
}

/**
 * @param filePath 文件路径
 * @returns 文件数据
 * @description: 删除文件
 */
export function removeFile(filePath: string) {
  return new Promise((resolve, reject) => {
    fs.unlink(filePath, err => {
      if (err) reject(err);
      resolve(true);
    });
  });
}

/**
 * 创建文件夹
 *
 * @param {string} folderName 文件夹名
 * @param {string} folderBeforePath 文件夹存放于哪个路径下
 */
export function createFolder(folderName: string, folderBeforePath: string) {
  try {
    const folderPath = path.join(folderBeforePath, folderName);
    if (!fs.existsSync(folderPath)) {
      fs.mkdirSync(folderPath);
      return folderPath;
    }
    return folderPath;
  } catch (e) {
    return false;
  }
}
